<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Microsoft Windows 下的 Sun，iPlanet 和 Netscape 服务器</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="install.windows.apache2.html">Microsoft Windows 下的 Apache 2.x</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="install.windows.sambar.html">Microsoft Windows 下的 Sambar 服务器</a></div>
 <div class="up"><a href="install.windows.html">Windows 系统下的安装</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="install.windows.sun" class="sect1">
 <h2 class="title">Microsoft Windows 下的 Sun，iPlanet 和 Netscape 服务器</h2>
 <p class="para">
  本节包含针对在 Windows 下 Sun Java System web 服务器，Sun ONE web 服务器，iPlanet 和
  Netscape 服务器的 PHP 安装说明与提示。
 </p>
 <p class="para">
  自 PHP 4.3.3 起可以通过 
  <a href="ref.nsapi.html" class="link">NSAPI 模块</a>使用 PHP 脚本来<a href="install.windows.sun.html#install.windows.sun.specialpages" class="link">产生定制目录列表于错误页面</a>。也可以使用为兼容
  Apache 的附加函数。目前使用的 web 服务器的支持请阅读<a href="install.windows.sun.html#install.windows.sun.notes" class="link">有关子请求的说明</a>。
 </p>
 
 <div class="sect2" id="install.windows.sun.cgi">
  <h3 class="title">Sun，iPlanet 和 Netscape 服务器的 CGI 方式安装</h3>
  <p class="para">
   要将 PHP 安装为 CGI 处理器，按以下步骤进行：
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     将 <var class="filename">php4ts.dll</var> 拷贝到 systemroot（即 Windows 的安装目录）；
    </span>
   </li>
   <li class="listitem">
    <p class="para">
     在命令行做文件关联，输入以下两行命令： 
     <div class="example-contents">
<div class="shellcode"><pre class="shellcode">assoc .php=PHPScript
ftype PHPScript=c:\php\php.exe %1 %*</pre>
</div>
     </div>

    </p>
   </li>
   <li class="listitem">
    <span class="simpara">
     在 Netscape Enterprise Administration Server 中建一个空的 shellcgi
     目录并随即删除（此步骤在 obj.conf 中新建了 5 行重要指令以允许 web
     服务器处理 shellcgi 脚本）；
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     在 Netscape Enterprise Administration Server 中新建一个新的 MIME
     类型（Category: type，Content-Type: magnus-internal/shellcgi，File Suffix: php）；
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     对每个要运行 PHP 的 web 服务器实例都进行以上步骤。
    </span>
   </li>
  </ul>
  <p class="para">
   更多将 PHP 设置为 CGI 可执行程序的内容见：<a href="http://benoit.noss.free.fr/php/install-php.html" class="link external">&raquo;&nbsp;http://benoit.noss.free.fr/php/install-php.html</a>。
  </p>
 </div>
 
 <div class="sect2" id="install.windows.sun.nsapi">
  <h3 class="title">Sun，iPlanet 和 Netscape 服务器的 NSAPI 方式</h3>
  <p class="para">
   要将 PHP 以 NSAPI 方式安装，按以下步骤进行：
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     将 <var class="filename">php4ts.dll</var>拷贝到 systemroot（即 Windows 的安装目录）；
    </span>
   </li>
   <li class="listitem">
    <p class="para">
     在命令行做文件关联，输入以下两行命令： 
     <div class="example-contents">
<div class="shellcode"><pre class="shellcode">assoc .php=PHPScript
ftype PHPScript=c:\php\php.exe %1 %*</pre>
</div>
     </div>

    </p>
   </li>
   <li class="listitem">
    <span class="simpara">
     在 Netscape Enterprise Administration Server 中新建一个新的 MIME
     类型（Category: type，Content-Type: magnus-internal/x-httpd-php，File Suffix: php）；
    </span>
   </li>
   <li class="listitem">
    <p class="para">
     编辑 <var class="filename">magnus.conf</var>（服务器版本 &gt;= 6）或 
     <var class="filename">obj.conf</var>（服务器版本 &lt; 6）并加入下面两行；要将新行放在 
     <em>mime types init</em>之后：
     <div class="example-contents">
<div class="cdata"><pre>
Init fn=&quot;load-modules&quot; funcs=&quot;php4_init,php4_execute,php4_auth_trans&quot; shlib=&quot;c:/php/sapi/php4nsapi.dll&quot;
Init fn=&quot;php4_init&quot; LateInit=&quot;yes&quot; errorString=&quot;Failed to initialise PHP!&quot; [php_ini=&quot;c:/path/to/php.ini&quot;]
</pre></div>
     </div>

     （PHP &gt;= 4.3.3）<em>php_ini</em>
     参数为可选项，但加上后就可以把 <var class="filename">php.ini</var> 放到 web 服务器的配置目录中去；
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     在 <var class="filename">obj.conf</var> 中配置默认对象（对于虚拟服务器类 [Sun web Server 6.0+]
     是 <var class="filename">vserver.obj.conf</var>文件）：在
     <em>&lt;Object name=&quot;default&quot;&gt;</em>
     一节，在所有的“ObjectType”行之后和所有的“AddLog”行之前加上这一行： 
     <div class="example-contents">
<div class="cdata"><pre>
Service fn=&quot;php4_execute&quot; type=&quot;magnus-internal/x-httpd-php&quot; [inikey=value inikey=value ...]
</pre></div>
     </div>

     （PHP &gt;= 4.3.3）作为附加参数可以加入一些特殊的 <var class="filename">php.ini</var> 值，例如可以在调用 
     <em>php4_execute</em> 时设定专门的 
     <em>docroot=&quot;/path/to/docroot&quot;</em>。对于布尔的 ini 选项请用 0/1 作为值，而不是 
     <em>&quot;On&quot;,&quot;Off&quot;,...</em>（这样不能正确工作），例如要用 
     <em>zlib.output_compression=1</em> 而不是 
     <em>zlib.output_compression=&quot;On&quot;</em>；
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     这几行仅在想要配置一个只有 PHP 脚本的目录时需要（类似 cgi-bin 目录）： 
     <div class="example-contents">
<div class="cdata"><pre>
&lt;Object name=&quot;x-httpd-php&quot;&gt;
ObjectType fn=&quot;force-type&quot; type=&quot;magnus-internal/x-httpd-php&quot;
Service fn=php4_execute [inikey=value inikey=value ...]
&lt;/Object&gt;
</pre></div>
     </div>

     在此之后可以在管理服务器中配置目录并将其类型设为 
     <em>x-httpd-php</em>。其中的所有文件都将作为 PHP 执行。这样可以隐藏 PHP 的使用，文件名还保留为 
     <var class="filename">.html</var>；
    </p>
   </li>
   <li class="listitem">
    <span class="simpara">
     重启动 web 服务使改动生效；
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     对每个要运行 PHP 的 web 服务器实例都进行以上步骤。
    </span>
   </li>
  </ul>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    更多将 PHP 设置为 NSAPI内容见：<a href="http://benoit.noss.free.fr/php/install-php4.html" class="link external">&raquo;&nbsp;http://benoit.noss.free.fr/php/install-php4.html</a>。
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    PHP 使用的堆栈大小（stacksize）依赖于 web 服务器的配置。如果在运行很大的
    PHP 脚本时死掉，建议在管理服务器中增大此值（在 &quot;MAGNUS EDITOR&quot; 一节中）。
   </p>
  </p></blockquote>
 </div>
 
 <div class="sect2" id="install.windows.sun.phpini">
  <h3 class="title">CGI 环境以及推荐在 php.ini 中进行的修改</h3>
  <p class="para">
   在写 PHP 脚本时很重要一点是 Sun JSWS/Sun ONE WS/iPlanet/Netscape
   是多线程 web 服务器。因此所有的请求都运行于同一个进程空间（即 web
   服务器自己的空间）而此空间只有一个环境。如果想取得 CGI
   变量例如 <em>PATH_INFO</em>，<em>HTTP_HOST</em>
   等时不能用老的 PHP 3.x 的方式 <span class="function"><a href="function.getenv.html" class="function">getenv()</a></span>
   或者类似手段（<em>$_ENV</em>）进行。只能取得运行的 web
   服务器的环境变量而没有任何有效的 CGI 变量！
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    为什么环境中有一些（无效的）CGI 变量？
   </p>
   <p class="para">
    解答：这是因为从管理服务器启动了 web 服务器进程，这将运行 web
    服务器的启动脚本，而你想要启动的是 CGI 脚本（CGI 脚本在管理服务器内部！）。这是为什么
    web 服务器启动的环境中有一些 CGI 环境变量的原因。可以不从管理服务器启动 web
    服务器来试验一下。用管理员用户从命令行手工启动——这样就不会看到类似 CGI 的环境变量了。
   </p>
  </p></blockquote>
  <p class="para">
   PHP 4.x 中取得 CGI 变量的正确方式是使用超全局变量 
   <var class="varname"><var class="varname"><a href="reserved.variables.server.html" class="classname">$_SERVER</a></var></var>。如果有一些老的脚本用了 
   <var class="varname"><var class="varname">$HTTP_HOST</var></var> 等，那应该在 <var class="filename">php.ini</var> 中打开 
   <em>register_globals</em> 选项并改变变量顺序（重要提示：去掉 
   <em>&quot;E&quot;</em>，因为这里不需要环境变量）： 
   <div class="example-contents">
<div class="cdata"><pre>
variables_order = &quot;GPCS&quot;
register_globals = On
</pre></div>
   </div>

  </p>
 </div>
 
 <div class="sect2" id="install.windows.sun.specialpages">
  <h3 class="title">错误页面的特殊使用或定制目录列表（PHP &gt;= 4.3.3）</h3>
  <p class="para">
   可以用 PHP 来为 <em>&quot;404 Not Found&quot;</em> 
   或类似的错误提示生成错误页面。对每个想要覆盖的错误页面在 
   <var class="filename">obj.conf</var> 中的对象里加入下面这行： 
   <div class="example-contents">
<div class="cdata"><pre>
Error fn=&quot;php4_execute&quot; code=XXX script=&quot;/path/to/script.php&quot; [inikey=value inikey=value...]
</pre></div>
   </div>

   其中的 <em>XXX</em> 是 HTTP 错误代码。删除掉可能干扰到自己设置的任何其它 
   <em>Error</em> 指令。如果对所有可能出现的错误都用同一个脚本处理，不要 
   <em>code</em> 参数即可。脚本里可以用 
   <var class="varname"><var class="varname"><a href="reserved.variables.server.html" class="classname">$_SERVER['ERROR_TYPE']</a></var></var> 取得 HTTP 状态代码。
  </p>
  <p class="para">
   还可以生成自己定制的目录列表。只要创建一个显示目录列表的 PHP 脚本并用下面一行在 
   <var class="filename">obj.conf</var> 中替换掉相应 
   <em>type=&quot;magnus-internal/directory&quot;</em> 默认的 Service 设置： 
   <div class="example-contents">
<div class="cdata"><pre>
Service fn=&quot;php4_execute&quot; type=&quot;magnus-internal/directory&quot; script=&quot;/path/to/script.php&quot; [inikey=value inikey=value...]
</pre></div>
   </div>

   对于错误和目录列表页面，原始的 URI 和转换后的 URI 都在变量 
   <var class="varname"><var class="varname"><a href="reserved.variables.server.html" class="classname">$_SERVER['PATH_INFO']</a></var></var> 和 
   <var class="varname"><var class="varname"><a href="reserved.variables.server.html" class="classname">$_SERVER['PATH_TRANSLATED']</a></var></var> 中。
  </p>
 </div>
 
 <div class="sect2" id="install.windows.sun.notes">
  <h3 class="title">有关 <span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span>和子请求（PHP &gt;= 4.3.3）的说明</h3>
  <p class="para">
   NSAPI 模块现在支持 <span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span>
   函数（别名：<span class="function"><a href="function.virtual.html" class="function">virtual()</a></span>）来进行子请求并将结果插入到 web
   页面里。问题是，此函数用到了一些 NSAPI 库中没有文档说明的特性。
  </p>
  <p class="para">
   在 Unix 下这不是问题，因为模块会自动寻找所需的函数并使用。如果找不到，<span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span>
   被禁用。
  </p>
  <p class="para">
   在 Windows 下 DLL 处理的局限性需要使用最新的 
   <var class="filename">ns-httpdXX.dll</var> 文件中的自动检测功能。这已在版本 6.1
   及以下的服务器中测试过。如果用了更高版本的 Sun 服务器，检测会失败并禁用 
   <span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span>。
  </p>
  <p class="para">
   在这种情况下，试试下面的方法。在 <var class="filename">magnus.conf</var>/<var class="filename">obj.conf</var>
   中的 <em>php4_init</em> 里加入下面的参数： 
   <div class="example-contents">
<div class="cdata"><pre>
Init fn=php4_init ... server_lib=&quot;ns-httpdXX.dll&quot;
</pre></div>
   </div>

   其中 <em>XX</em> 是正确的 DLL 版本号。在 server-root 目录下去找合适的
   DLL 的名字。文件大小最大的 DLL 就是了。
  </p>
  <p class="para">
   可以用 <span class="function"><a href="function.phpinfo.html" class="function">phpinfo()</a></span> 函数来检查状态。
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    但要注意：对 <span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span> 的支持是试验性质的！
   </p>
  </p></blockquote>
 </div>
 
</div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="install.windows.apache2.html">Microsoft Windows 下的 Apache 2.x</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="install.windows.sambar.html">Microsoft Windows 下的 Sambar 服务器</a></div>
 <div class="up"><a href="install.windows.html">Windows 系统下的安装</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
